/**
 * 
 */
package mdb.com.vn.web.beans;

import java.io.Serializable;
import java.util.Date;
import java.util.Iterator;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import mdb.com.vn.model.CardSms;
import mdb.com.vn.model.IBankingSms;
import mdb.com.vn.model.LoansSMS;
import mdb.com.vn.model.SmeSms;
import mdb.com.vn.services.MDBServices;
import mdb.com.vn.utils.DateUtils;
import mdb.com.vn.utils.TextUtil;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.primefaces.event.FileUploadEvent;

/**
 * @author tu.dod
 * 
 */
@ManagedBean(name = "fileUploadBeans")
@RequestScoped
public class FileUploadBeans implements Serializable {
	/**
	 * 
	 */
	@ManagedProperty("#{mdbServices}")
	private MDBServices mdbServices;

	private static final long serialVersionUID = 1L;

	public void handleFileUploadLoanSms(FileUploadEvent event) {
		try {
			XSSFWorkbook wb;
			XSSFSheet sheet;
			HSSFWorkbook wb2003;
			HSSFSheet sheet2003;
			Iterator<Row> rowIterator;
			if (event.getFile().getFileName().endsWith(".xlsx")) {
				wb = new XSSFWorkbook(event.getFile().getInputstream());
				sheet = wb.getSheetAt(0);
				rowIterator = sheet.iterator();
			} else {
				wb2003 = new HSSFWorkbook(event.getFile().getInputstream());
				sheet2003 = wb2003.getSheetAt(0);
				rowIterator = sheet2003.iterator();
			}
			// Iterate through each rows from first sheet
			Row rowheader = rowIterator.next();
			int numberOfCells = rowheader.getPhysicalNumberOfCells();
			if (numberOfCells == 14) {
				while (rowIterator.hasNext()) {
					Row row = rowIterator.next();
					// For each row, iterate through each columns
					Iterator<Cell> cellIterator = row.cellIterator();
					int position = 0;
					String loansId = "";
					String phone = "";
					while (cellIterator.hasNext()) {
						position++;
						Cell cell = cellIterator.next();
						if (position == 5) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								phone = String.valueOf(cell
										.getNumericCellValue());
								break;
							case Cell.CELL_TYPE_STRING:
								phone = cell.getStringCellValue();
								break;
							}
						}
						if (position == 6) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								loansId = String.valueOf(cell
										.getNumericCellValue());
								break;
							case Cell.CELL_TYPE_STRING:
								loansId = cell.getStringCellValue();
								break;
							}
						}
					}
					if (!loansId.equals("") && !phone.equals("")) {
						LoansSMS loansSMS = null;
						loansSMS = mdbServices.getLoanSmsByLD(loansId);
						if (loansSMS != null) {
							loansSMS.setPhoneNumber(phone);
							loansSMS.setUpdatedBy(loansSMS.getBranchCode());
							loansSMS.setUpdatedDate(new Date());
							mdbServices.updateLoanSms(loansSMS);
						}

					}
				}
				event.getFile().getInputstream().close();
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_INFO,
								"Cập nhật thành công số điện thoại khách hàng", ""));
			} else {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								null,
								new FacesMessage(FacesMessage.SEVERITY_ERROR,
										"Tập tin không đúng định dạng",
										"Vui lòng kiểm tra lại hoặc liên hệ quản trị hệ thống"));

			}

		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Lỗi xảy ra trong quá trình nhập hệ thống",
							"Vui lòng kiểm tra lại hoặc liên hệ quản trị"));
		}

	}

	public void handleFileUploadSMESms(FileUploadEvent event) {

		try {
			XSSFWorkbook wb;
			XSSFSheet sheet;
			HSSFWorkbook wb2003;
			HSSFSheet sheet2003;
			Iterator<Row> rowIterator;
			if (event.getFile().getFileName().endsWith(".xlsx")) {
				wb = new XSSFWorkbook(event.getFile().getInputstream());
				sheet = wb.getSheetAt(0);
				rowIterator = sheet.iterator();
			} else {
				wb2003 = new HSSFWorkbook(event.getFile().getInputstream());
				sheet2003 = wb2003.getSheetAt(0);
				rowIterator = sheet2003.iterator();
			}
			// Iterate through each rows from first sheet
			Row rowheader = rowIterator.next();
			int numberOfCells = rowheader.getPhysicalNumberOfCells();
			if (numberOfCells == 10) {
				while (rowIterator.hasNext()) {
					Row row = rowIterator.next();
					// For each row, iterate through each columns
					Iterator<Cell> cellIterator = row.cellIterator();
					int position = 0;
					String gcif = "";
					String phone = "";
					Date processDate = null;
					while (cellIterator.hasNext()) {
						position++;
						Cell cell = cellIterator.next();
						if (position == 5) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								phone = String.valueOf(cell
										.getNumericCellValue());
								break;
							case Cell.CELL_TYPE_STRING:
								phone = cell.getStringCellValue();
								break;
							}
						}
						if (position == 4) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								gcif = String.valueOf(cell
										.getNumericCellValue());
								break;
							case Cell.CELL_TYPE_STRING:
								gcif = cell.getStringCellValue();
								break;
							}
						}
						if (position == 2) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								processDate = DateUtils.createDate(String.valueOf(cell
										.getNumericCellValue()));
								break;
							case Cell.CELL_TYPE_STRING:
								processDate = DateUtils.createDateDDMMYYYY(cell.getStringCellValue());
								break;
							}
						}
					}
					if (!gcif.equals("") && !phone.equals("")) {
						SmeSms smeSms = null;
						smeSms = mdbServices.getSmeSmsByProperties(gcif,
								processDate);
						if (smeSms != null) {
							smeSms.setPhoneNum(phone);
							smeSms.setUpdatedBy(smeSms.getBranchCode());
							smeSms.setUpdatedDate(new Date());
							mdbServices.updateSmeSms(smeSms);
						}

					}
				}
				event.getFile().getInputstream().close();
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_INFO,
								"Cập nhật thành công số điện thoại khách hàng", ""));
			} else {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								null,
								new FacesMessage(FacesMessage.SEVERITY_ERROR,
										"Tập tin không đúng định dạng",
										"Vui lòng kiểm tra lại hoặc liên hệ quản trị hệ thống"));

			}

		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Lỗi xảy ra trong quá trình nhập hệ thống",
							"Vui lòng kiểm tra lại hoặc liên hệ quản trị"));
		}
	}

	public void handleFileUploadIBSms(FileUploadEvent event) {

		try {
			XSSFWorkbook wb;
			XSSFSheet sheet;
			HSSFWorkbook wb2003;
			HSSFSheet sheet2003;
			Iterator<Row> rowIterator;
			if (event.getFile().getFileName().endsWith(".xlsx")) {
				wb = new XSSFWorkbook(event.getFile().getInputstream());
				sheet = wb.getSheetAt(0);
				rowIterator = sheet.iterator();
			} else {
				wb2003 = new HSSFWorkbook(event.getFile().getInputstream());
				sheet2003 = wb2003.getSheetAt(0);
				rowIterator = sheet2003.iterator();
			}
			// Iterate through each rows from first sheet
			Row rowheader = rowIterator.next();
			int numberOfCells = rowheader.getPhysicalNumberOfCells();
			if (numberOfCells == 10) {
				while (rowIterator.hasNext()) {
					Row row = rowIterator.next();
					// For each row, iterate through each columns
					Iterator<Cell> cellIterator = row.cellIterator();
					int position = 0;
					String gcif = "";
					String phone = "";
					Date processDate = null;
					while (cellIterator.hasNext()) {
						position++;
						Cell cell = cellIterator.next();
						if (position == 3) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								phone = String.valueOf(cell
										.getNumericCellValue());
								break;
							case Cell.CELL_TYPE_STRING:
								phone = cell.getStringCellValue();
								break;
							}
						}
						if (position == 1) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								gcif = String.valueOf(cell
										.getNumericCellValue());
								break;
							case Cell.CELL_TYPE_STRING:
								gcif = cell.getStringCellValue();
								break;
							}
						}
						if (position == 5) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								processDate = DateUtils.createDate(String.valueOf(cell
										.getNumericCellValue()));
								break;
							case Cell.CELL_TYPE_STRING:
								processDate = DateUtils.createDateDDMMYYYY(cell.getStringCellValue());
								break;
							}
						}
					}
					if (!gcif.equals("") && !phone.equals("")) {
						IBankingSms iBankingSms = null;
						iBankingSms = mdbServices.getIBSmsByProperties(gcif, processDate);
						if (iBankingSms != null) {
							iBankingSms.setPhoneNum(phone);
							iBankingSms.setUpdatedBy(iBankingSms.getBranchCode());
							iBankingSms.setUpdatedDate(new Date());
							mdbServices.updateIBSms(iBankingSms);
						}

					}
				}
				event.getFile().getInputstream().close();
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_INFO,
								"Cập nhật thành công số điện thoại khách hàng", ""));
			} else {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								null,
								new FacesMessage(FacesMessage.SEVERITY_ERROR,
										"Tập tin không đúng định dạng",
										"Vui lòng kiểm tra lại hoặc liên hệ quản trị hệ thống"));

			}

		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Lỗi xảy ra trong quá trình nhập hệ thống",
							"Vui lòng kiểm tra lại hoặc liên hệ quản trị"));
		}
	}

	public void handleFileUploadCardSms(FileUploadEvent event) {


		try {
			XSSFWorkbook wb;
			XSSFSheet sheet;
			HSSFWorkbook wb2003;
			HSSFSheet sheet2003;
			Iterator<Row> rowIterator;
			if (event.getFile().getFileName().endsWith(".xlsx")) {
				wb = new XSSFWorkbook(event.getFile().getInputstream());
				sheet = wb.getSheetAt(0);
				rowIterator = sheet.iterator();
			} else {
				wb2003 = new HSSFWorkbook(event.getFile().getInputstream());
				sheet2003 = wb2003.getSheetAt(0);
				rowIterator = sheet2003.iterator();
			}
			// Iterate through each rows from first sheet
			Row rowheader = rowIterator.next();
			int numberOfCells = rowheader.getPhysicalNumberOfCells();
			if (numberOfCells == 10) {
				while (rowIterator.hasNext()) {
					Row row = rowIterator.next();
					// For each row, iterate through each columns
					Iterator<Cell> cellIterator = row.cellIterator();
					int position = 0;
					String gcif = "";
					String phone = "";
					Date processDate = null;
					while (cellIterator.hasNext()) {
						position++;
						Cell cell = cellIterator.next();
						if (position == 3) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								phone = String.valueOf(cell
										.getNumericCellValue());
								break;
							case Cell.CELL_TYPE_STRING:
								phone = cell.getStringCellValue();
								break;
							}
						}
						if (position == 1) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								gcif = String.valueOf(cell
										.getNumericCellValue());
								break;
							case Cell.CELL_TYPE_STRING:
								gcif = cell.getStringCellValue();
								break;
							}
						}
						if (position == 5) {
							switch (cell.getCellType()) {
							case Cell.CELL_TYPE_NUMERIC:
								processDate = DateUtils.createDate(String.valueOf(cell
										.getNumericCellValue()));
								break;
							case Cell.CELL_TYPE_STRING:
								processDate = DateUtils.createDateDDMMYYYY(cell.getStringCellValue());
								break;
							}
						}
					}
					if (!gcif.equals("") && !phone.equals("")) {
						CardSms cardSms = null;
						cardSms = mdbServices.getCardSmsByProperties(gcif, TextUtil.PROCESSED, processDate);
						if (cardSms != null) {
							cardSms.setPhoneNum(phone);
							cardSms.setUpdatedBy(cardSms.getBranchCode());
							cardSms.setUpdatedDate(new Date());
							mdbServices.updateCardSms(cardSms);
						}

					}
				}
				event.getFile().getInputstream().close();
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_INFO,
								"Cập nhật thành công số điện thoại khách hàng", ""));
			} else {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								null,
								new FacesMessage(FacesMessage.SEVERITY_ERROR,
										"Tập tin không đúng định dạng",
										"Vui lòng kiểm tra lại hoặc liên hệ quản trị hệ thống"));

			}

		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Lỗi xảy ra trong quá trình nhập hệ thống",
							"Vui lòng kiểm tra lại hoặc liên hệ quản trị"));
		}
	}


	public void setMdbServices(MDBServices mdbServices) {
		this.mdbServices = mdbServices;
	}

}
